=================================
PC8300 "Timex" ROM for the PC8300
Silicon Mountain Computers
=================================


                                              Silicon Mtn. Computers
                                              C-12, Mtn. Stn. Group Box
                                              Nelson, BC VI L 2J3

                               PC8300 ROM, V1.3 ADDENDA

Thanks to the efforts of my "testing staff" at the Vancouver Sinclair User Group, who kindly
reviewed and provided constructive criticism on the 1.2 version of the PC8300 "Timex" ROM, I did
some more "byte pinching" and came up with V 1.3. I think that you will like mreqhe added features.

Since some of you have been waiting for quite a while for delivery of your new ROM, I have
decided to detail the changes in this addenda sheet, rather than have you wait even longer until
I can rework the documentation. All the features of V1.2 were retained, with the following
changes and additions:


1: AUDIBLE LOAD/SAVE:

One objection to 1.2 was that there was no way of turning off the "motoring", or "gieger-counter"
sound while loading or saving, short of cutting the speaker wires. If you have to do your
computing late at night and don't want to wake your spouse, you'll appreciate 1.3.

In this version, the default is "LOAD/SAVE MONITOR OFF." In other words, it will be as quiet as
a TS1000 while loading. If you DO want the audible monitor feature, enter the following pokes

POKE 32767,53

Note that this is the last byte in memory (16K). If you lower your RAMTOP, the address to be
POKEd will always be one less than your RAMTOP setting.

This will remain in force until you NEW, soft reset, hard reset, or POKE 32767,62.

Incidental1y, if you are using the 32K pack, and wish to make all 32K available, you must POKE
16389,192 then NEW before loading or entering a program. In this case, the address you POKE for
the audible tape monitor will be 49151.


2: HARD RESET

It has come to my attention that the 16K packs sold by the PC8300 manufacturer, is not as prone
to refresh trouble as the Timex pack. As a result, it may be difficult or impossible to force a
hard reset by simply holding RESET for several seconds. For this reason, a HARD RESET has been
added. If you hold the SHIFT key while pressing RESET, the result will be just like unplugging
and powering up again. This will be especially useful if you're using non-volatile RAM, which is
even immune to power-down!

BE CAREFUL about hitting SHIFT RESET instead of SHIFT ZERO ("Delete"). If you miss, it will
delete alright... everything in memory!

All other comments about reset still apply; e.g., a soft reset will preserve your program and
variables, unless the display file is trashed, in which case a hard reset will be invoked. The
only concession is that there is no longer a "short beep" (soft reset) as opposed a "long beep"
(hard reset or NEW). However, when forcing a hard reset (shift reset), you will get a continuous
beep until you let go of the shift key.


3: MARGIN DEFAULT:

To prevent your having to readjust your vertical hold after loading Timex programs (MARRGIN =
31), the new PC8300 ROM will now ALWAYS come up with margin set at 31 after NEW or either type
of RESET. If you wish to change margin, break the program after loading and POKE 16424 with the
desired value.

Programs saved from the PC8300 with modified MARGIN will later load back with the same value.
Similarly, originals of British programs will typically load in with margin set at 55.


4: BRONX CHEER:

It was pointed out that an aborted load does not always give a bronx cheer. Whether it will or
not, depends on whether the program on tape was saved from SLOW or FAST mode, and on how far
into the tape the drop-out occurs. On occasion you will get a double beep instead of a bronx
cheer followed by a beep.


                                      INSTALLING THE EPROM

In case you haven't figured out already how to get into the PC8300, it's really quite simple.
Remove the three Phillips screws from the bottom. The case will now snap apart into two halves.
Some of them are quite tight, and it will help to press firmly on the side of the top case-half
while unsnapping the lower case-half. You might find it easier with two people, one pushing in
on the top half while the other pulls on the lower half.

Be careful not to bend the keyboard lines any more than necessary. Gently pry the old ROM out of
its socket using a flat-blade screwdriver. (This is the medium-sized chip near the keyboard,
cable. Its part number starts with AMI.) Don't pry the socket from the board! Put the
screwdriver between the chip and the socket.

Install the EPROM in place of the ROM, making sure that the end with the notch is toward the
right (pointing to the speaker). Re-assemble the machine, and compute away.


                                         SW1TCHABLE ROMS

You may wish to make the ROM switchable back to the original, just in case you want to play with
the color pack (assuming you can get it to work) or the sound commands. If you are reasonably;
experienced at soldering and computer hardware-hacking, you shouldn't have much trouble. Simply
"piggy-back" the EPROM to the ROM, instead of plugging into the adaptor socket. Do not solder
together pin 18 of the ROM and the corresponding pin 20 of the EPROM. Instead, bend out pin 18
of ROM. Note that some other connections are slightly different; simply connect the little
jumper wires to the ROM instead of to the adaptor socket.

Connect a 10K resistor from pin 18 of the ROM to +5V (pins 26-27-28 of the EPROM) and another,
resistor from pins 20 and 22 of the EPROM to +5V). Install an SPDT switch in the case.
Connect the center terminal to pin 18 of the original ROM socket, and connect the outside
terminals to pin 18 of the ROM, and pins 20-22 of the EPROM. Plug the ROM with the piggy-backed
EPROM back into the socket. Voila!

                                          Fred Nachbaur

-------------------------------------------------------------------------------

                                      Silicon Mtn. Computers
                                      C-12, Mtn. Stn. Group Box
                                      Nelson, BC V1L 5P1
                                      Canada
                                      August, 1987

                            THE PC8300 "TIMEX" ROM
                        Preliminary Documentation V1.0

                                INTRODUCTION

HOW COMPATIBLE IS "COMPATIBLE?"

"Compatibility" is a highly relative term, as regards computers. We've
heard of problems running IBM software on "PC Compatibles," Apple
software on "Apple Compatibles," and on and on. Some "clones" that claim
98% compatibility don't mention that the 2% they DON'T run include the
most popular programs for the "parent" machine.

Such is the case with the "PC8300." Though it will run SOME Timex
software, the range of compatible software is quite narrow. Perhaps at
the time the machine was designed (around 1982) the claim of Sinclair
compatibility was indeed justified. At that time most software was still
written in BASIC. However, since then most new software was written in
machine-language (also called "machine code") to be truly useful. The
PC8300, as supplied, will NOT run such software.


WHAT IS MACHINE-CODE?

For those of you who are new to computing, you should know what is meant
"machine code." This is the "native language" of the Z80 CPU chip
that is common to both the PC8300 and the ZX81/TS1000. The "ROM," the
very thing that "makes it all work," is written in this "low level"
1anguage.

Most casual programmers will be much more comfortable with "high-level"
languages, such as BASIC, which more-or-less approximates the English
language and human ways of thinking. The ROM, or "Read-Only Memory"
contains machine-language routines which, among other things, provide
the BASIC "environment." You simply type in your program statements as
"lines" in the "instruction file" or "program area." When you RUN the
program, the ROM scans each line one at a time, and "interprets" it into
its native language, executing the machine language routines
corresponding to each element of your BASIC instructions. Along the way
it does extensive error-checking, scans for the BREAK key, deals with
floating-point numbers, maintains the "variables area" and services
other segments of memory, and does sundry other "housekeeping" tasks,
all the time creating the display (in SLOW mode). This process is
(relatively) very time-consuming, resulting in slow overall program
response.

Programs written in machine-code are much faster, because they are
executed directly instead of being interpreted. Depending on what is
being done, a speed improvement factor of anywhere between 10 and 10000
times is possible. Machine-code is also very compact, each instruction
taking only one to four bytes instead of 6-30 bytes for a typical BASIC
program line. For these reasons, most high-quality commercial software
is written in machine-code even though it is more cumbersome to work
with (for the programmer) than BASIC.

There are two drawbacks to machine-code, both of which affect the
compatibility of the PC8300, even though the PC8300 and the
Timex/Sinclairs share the same Z80A CPU (and therefore the same machine
language). The first is that machine-language is location-dependent. It
is written to run in a specific area of memory, and cannot easily be
moved elsewhere. The second is that most machine-code contains "ROM
calls," which are like machine-language GOSUBs into the ROM operating
system. By using ROM calls, a machine-language programmer can make his
code even more compact.

Another incompatibility has to do with the location of the display file
(the image of the TV picture in memory). In the PC8300, this is below the
BASIC program area. In the T/S, it is above the program file.

To summarize, the PC8300 will load Timex BASIC, but without the
variables area (crucial to the proper operation of many programs).
Furthermore, it will not successfully run any known machine-language
programs.


SO WHY NOT PLUG A TIMEX ROM INTO THE PC8300?

If you've tried plugging a Timex 1000 / Sinclair ZX81 or TS1500 ROM into
the PC8300, you've found out that it works, sort of. You can now load
run most Timex software. However, it's not really usable, since the
display on the TV or monitor is all wacky. In SLOW mode, the sides are
scalloped, making alternate lines of characters lean severely one way,
then the other. In fast mode it's even worse, as the whole display
shakes around to the point where it's unreadable. A severe headache is
almost guaranteed if you actually try to use this display.

The reason for this is that the SOFTWARE that controls the TV picture
(in the ROM) is highly dependent on the HARDWARE (in the SCL "custom
chip"). To solve this, you'd be tempted to plug a Timex "ULA" into the
custom chip socket instead. DO NOT TRY IT. At best it won't work, at
worst you'll fry the computer and/or the chip. The pinouts of the two
chips are completely different. It is conceivable that you could make a
"twister socket" to make it work (anyone in the Vancouver User Group
care to tackle this?), but the practicality of such an arrangement is
dubious.


                     ENTER THE PC8300 "TIMEX" ROM

The PC8300 "Timex" ROM is actually an EPROM (Erasable Programmable ROM)
in an adaptor socket to plug into the PC8300's ROM socket. It is
essentially a Timex ROM, with some important differences. The entire
display routines have been rewritten, to work on the 8300's hardware.
The result is a rock-steady display, with greatly improved Timex
compatibility. In addition, a number of features were added which don't
even exist on the original Timex ROM! Some, like beeping keys and
blinking cursors, are much 1ike the old PC8300 ROM. Others, 1ike IN,
OUT, and STEP, changeable margin and speed, and so on, are brand new
developments.


FIRST THE BAD NEWS...

In the Timex and Sinclair computers, the top 512 bytes of the ROM are
used to house the "character patterns" that define the shapes of the
letters, numbers, punctuation and graphics characters you see on the
screen. In the PC8300, however, these patterns are housed in the CUSTOM
CHIP! They are therefore unchangeable, no matter what we do to the ROM.

In itself, this would have been a good idea since it frees up 512
precious ROM bytes for added features. However, the designers of the
PC8300 decided to get "creative" and changed some of the patterns.
Specifically, the grey/white and grey/black graphics are now right
triangles. The grey square is a race car (go-cart?). The British Pound
symbol is some kind of space-invader super-fly. It gets worse. The colon
(such an unobtrusive yet useful character) is now a glaring bat-like
critter. The question mark has been replaced with a pac-ghost. A
computer without a question mark? This thing must be pretty sure of
itself! Come on, guys.

Assuming that you can live with these differences, and can get used to
pac-ghosts punctuating all queries, there are still a couple other items
in "bad news" department. The biggest one is that neither "quasi"
nor "true" high-resolution will run on this machine. Why not? Again, it
to do with the way the SCL "takes over" the generation of the
patterns on the screen. In fact, the I register is now usable by the
machine-language programmer; changing it no longer re-vectors the
character generation elsewhere in the ROM, or (as in WRX16) to a high-
res bit map.

However, I made a few observations which might help others figure out
how get around this. (Wilf?...) Though changing the I register has no
is immediately visible effect, you CAN see slight shifts in the display as
it changed, especially if the brightness is turned up so you can see
the background. Also, WRX16 "sort of" runs; again, with brightness up,
you can barely see minor changes as the contents of the high-res display
file is altered. Incidentally, the whole WRX16 display "leans". This is
because the hardware's timing requirements are different. The delays
would have to be adjusted, just as I did for the display routines in the
ROM.

Another point is that the SCL character patterns are accessible using
I/O (necessary for the printer routines). This suggests that it may be
possible, using I/O, to turn off the SCL's meddling in our display
affairs. Finally, the manufacturer claims high-resolution capability;
but how? (Wilf, HELP!)

The last known incompatibility only affects programs that generate "big
characters" using the ROM patterns at address 7680-8191 ("SW-LO-RES",
"BANNER", etc.) These will now, of course, produce nothing but garbage
since this area now contains our new routines instead. Incidentally, my
"ABC/123" DOES run, since its patterns are self-contained. You could do
the same thing to make simi1ar programs work. The bonus is, that being
in RAM, the patterns will now be changeable. See also the section in
this manual on "Accessing the Character Patterns."


NOW THE GOOD NEWS...

On the bright side, you now have a ROM that will run just about all
the Timex software other than the types mentioned above. I took pains to
leave the common ROM calls in their original places; the only command
routine that was moved is PAUSE, from 0F32h to 1DFFh. I have not yet
found any machine-code programs that don't work properly.

What's more, you now have a number of additional features.

                          ADJUSTABLE MARGIN

The MARGIN system variable (16424) specifies how many blank lines are
above and below the picture. In SLOW mode, this is where your actual
computing is taking place. In the original Timex and PC8300 ROMs, this
is set every time through the main display loop, so POKEing it to other
values has no lasting effect.

The total number of lines displayed is 192 + 2*(MARGIN>). For NTSC
(American) TV (60 frames per second) MARGIN is set to 31, for a total of
254 lines. For PAL TV (everywhere else in the world) at 50 frames per
second, MARGIN is 55 lines for 302 lines total. The PC8300 has a diode
just to the right of the ROM; if this is connected, MARGIN is
automatically set to 55 (for 50 frames-per-second). If it is
disconnected, it will initialize at 31 (for 60 FPS).

With the new ROM, MARGIN is only set once, during initialization. Its
initial value will still depend on whether the diode is connected or
not. However, you can now change it to your heart's content! Permissible
values range from 7 through 119, in steps of 8; i.e. 7, 15, 23, 31, etc.
Changing MARGIN will have two main effects; changing the number of
frames displayed every second, and changing over-all machine speed in
SLOW mode. Approximate frame rate can be computed with the equation:

FR=15540/(197+2*MARG)

Overall speed of FAST mode is unaffected by MARGIN. Approximate machine
speed in SLOW mode (relative to the 60 fps speed) can be computed with
the equation:

RS=MARG/(23.6+.239*MARG)

Some "landmarks", to give you an idea, are:

MARG FRAME RATE SPEED
7    73.6       .277
15   68.4       .552
31   60         1.00
55   50.6       1.50
79   43.7       1.86
95   40.2       2.05
119  35.7       2.29

So you see that with higher MARGIN, you get a lower frame rate and a
faster overall speed. Changing the frame rate will require readjustment
of the vertical hold on your TV or monitor; this will impose a
limitation on the usable range. For maximum machine speed, adjust your
vertical hold as slow as it will go, and POKE the highest allowable
value into 16424 that results in a stable display. Another factor is
that at very low frame rates, the display will start to "flicker." It's
usually less noticeable on monitors, since they often have a "long
persistence" phospor in their picture tubes, which reduces or eliminates
the flickering effect.

Changing MARGIN will also have an effect on the behavior of the PAUSE
command. For example, with MARG at 31, PAUSE 60 gives a delay of one
second. However, with MARG at 95, you would use PAUSE 40 to delay
approximately one second. In other words, as MARGIN increases, overall
speed increases but PAUSE "speed" DECREASES. Also, the rate at which the
cursor blinks will depend on MARGIN. The cursor stays in each state for
a time equivalent to PAUSE 32.

The other extreme, low values for MARGIN, gives a very smooth display,
but an extremely slow overall pace (down to about 27% of normal). This
could be handy in debugging machine-code graphics routines, so that you
can see what's happening in "slo-mo." It might also be useful for
"cheating" on fast games!

NEW resets MARGIN to its default (31 or 55), but RESET does not.

Values of MARGIN higher than 119 cause bizarre keyboard behavior. Values
other than one less than multiples of 8 give "shifted" characters. (A
study of this might help in cracking the hi-res problem.) Try this:

100 FOR A=1 TO 22
110 PRINT " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
120 NEXT A
130 FOR A=31 TO 39
140 POKE 16424,A
150 PAUSE 10
160 NEXT A
170 FOR A=39 TO 31 STEP -1
180 POKE 16424,A
190 NEXT A
200 IF INKEY$="" THEN GOTO 130
POKE 16424,31

How about that! "Quasi-bit-scrol1s" in BASIC!


                        THE PAUSE COMMAND

If you ran the demo above, you may have noticed that the PAUSE command
is now "blinkless" in SLOW mode. A welcome change, wouldn't you agree?

                    INITIALIZATION AND RESET

The presence of the RESET key is a nice feature. However, with a true
Timex ROM it would have been a bane as well. Accidentally hitting it
instead of zero or delete would be catastrophic, wiping your whole
program.

For this reason, the ROM initialization routine was extensively
reworked. The NEW command works exactly as before. However, RESET (or
USR 0) now does the following:

1: It checks to see if D_FILE points to a 118 character. If so,

2: It checks to see if a reasonably healthy display file follows. It
must see 24 "118s" separated by no more than 32 characters follow the
first 118.

3: While combing through the display file, it resets any "bit 6 high"
characters that it might find, just in case you got in trouble by poking
an illegal character into the display file.

4: It resets the machine, GOSUB and calculator stacks, and simply returns
to the BASIC "warm boot" entry point. Program and variables are left
alone.

5: If the display file tests fail, it sets RAMTOP at 8000h (32K)
assuming a 16K pack, and jumps into the NEW command.

On reset or NEW, you will hear a BEEP. On NEW (or "hard" reset, on
power-up or with a defective display file) it will be a "long beep." On
warm reset, it wi11 be a "short beep." The sound of the beep will let
you know what took place when you hit the reset button.

The reset key is useful for the following:

1: Breaking ANY machine-code program. Try it with programs like FROGGER,
PINBALL, etc. Even if you're stuck in an infinite machine-code loop, the
reset key will non-destructively bring you out of it.

2: Clearing the GOSUB stack. If you have repeated GOSUBs without
RETURNS, you can eat up a lot of memory. Try this (FAST mode suggested):

          10 GOSUB 10

The program will stop with out-of-memory report 4/10. Just about
anything you try to do, e.g. entering new lines, will give the out-of-
memory report. Hit the reset key; voila. All is well.

3: Loading a program without its variables. Let's say you have a program
(like VU-FILE) loaded with tons of data, but you only want to load the
program itself to start a new data-base. Load the program with data
(e.g. "GAZ"), and when you're sure that the program is past the display
file, hit reset. The program wi11 be there, ready to RUN. An audible
monitor (earphone, etc.) is very helpful. Most Timex users have come to
recognize the sound of an empty display file; it's a characteristic
bleeee-bleeee-bleeee. This might also be useful to load glitched tapes,
provided that the glitch is in the variables area (after the display
file).


OTHER NOTES ON NEW AND RESET

As mentioned, a cold reset (power-up, etc.) will initialize RAMTOP at
the 32K mark. If you're using only the basic 2K machine, it is highly
recommended that you enter POKE 16389,72 then NEW right after powering
up. If you don't do this, you will crash when memory gets full, instead
of getting a nice clean "error 4." Also, this will "collapse" the
display file, making it use only as much memory as is absolutely
required. In the tight confines of 2K you need all the free memory you
can get. Sinclair's marvellous collapsible display file was retained for
this reason.

A negative side-effect to the collapsible display file is that the
SCROLL command is not the greatest. It can take a long time to shakily
clear a scrolled display file, especially if there is a large variables
area present. However, the advantages for 2K users outweigh the
inconvenience for 16K SCROLL users, in my opinion. There have been many
neat SCROLL routines published for 16K users, which can be used instead.
See SyncWare News Vol. 2 No. 4 for one such routine.

Assuming you got around the hardware problem of missing control lines
MREQ* and M1*, and are running a 64K pack, you will similarly have to
change RAMTOP as desired after power-up.

When hitting Reset, do it quickly; don't hold it down any longer than
necessary. The reason is that the PC8300 (and Timex) use a non-standard
way of refreshing dynamic RAM. RAM contents can get corrupted if the
Reset button is held down for too long.

On the other hand, this property can be useful to force a "hard" reset.
Try this:

          10 INPUT A

Then enter STEP 10 (more about this later). Press any key, then try
entering a number. The machine will hang up, and Reset won't bring it
back. Now hold Reset for several seconds; on releasing it, the "long
beep" should signal a hard reset, and you once again have control.


                           THE NEW COMMANDS

That's right. You now have several new commands at your disposal. Two of
these, REM and STEP, are actually extensions of existing tokens; the
other three, IN, OUT and BEEP are new tokens entirely.


REM

The REM command is used to turn the flashing cursor on or off:

REM 0 = blinking cursor off
REM 1 = blinking cursor on.

Why would you want to turn off a neat feature like a blinking cursor?
The reason is that, like the PC8300 ROM, it uses the previously "unused"
system variable at 16507-16508 as a pointer to the address being
blinked. The drawback is that many Timex programs use this for their own
purposes; if the BLINK feature could not be turned off, such programs
would crash or otherwise malfunction.

Bit 3 of CD-FLAG is used as the BLINK flag. If this bit is zero, blink
will be off. For this reason, when loading software saved from a Timex,
the blinking cursor will be disabled. Assuming that the loaded program
doesn't use 16507-16508, you can enable it with REM 1.

It is conceivable that some machine-code REM lines could spuriously turn
BLINK on or off; i.e. if the first character is a 0 or 1. These
represent the machine-language commands INC E and DEC E, which are
unlikely to be at the start of a program; however, if your program DOES
have such REM lines, avoid problems with RUN or GOTO a line number
greater than the REM.

Similarly, avoid 0 and 1 as the first characters in your REMarks, unless
you intentionally want to turn the BLINK on or off. (See the machine-
language version of "Blinky Kliky Typewriter" in the sample programs.)

Want a mnemonic for REM? In psychology, "REM" means "Random Eye Motion."
Sort of a "blink," as it were.


BEEP

Access this by pressing SHIFT ENTER to get the FUNCTION cursor, then
press V. BEEP 0 (or any expression evaluating to zero) turns off the
beeping keyboard. BEEP 1 (or any non-zero expression) turns it on again.

BEEP uses bit 5 of CD-FLAG. If this bit is zero, BEEP is on. Therefore,
programs saved on a Timex will load with BEEP on. BEEP doesn't mess with
any other system variables, so it should be safe with all Timex
programs.

Note that even though BEEP is accessed like a FUNCTION, it is actually a
COMMAND. There simply weren't any unused command tokens left over, so I
had to use a function keyword.


OUT

This is another COMMAND disguised as a function. Type it by pressing
SHIFT ENTER (Function), then 2. The format is as follows:

OUT n , v

where n is the port number (0-255) and v is the value to be sent to that
port (0-255). These may be decimal numbers, or other numeric
expressions.


OUT uses FAST mode to do the actual output, to avoid problems with the
interrupts. For this reason, there will be a slight blink when used in
SLOW mode (similar to the old PAUSE blink).


IN

IN, on the other hand, is a true function. Type IN using FUNCTION 1.
Unlike most of the other functions (like SIN, LN, etc.) it has priority
4 (like NOT). It returns the input from the port number specified. For
examp1e,

10 LET A=IN 245
20 PRINT A
30 RUN

This little program, incidentally, shows you how you can make clicks
come out of the speaker. EVERY OTHER time you IN 245, the speaker will
click. Another example:

 5 REM KLIKY TYPEWRITER
 7 REM ENTER=SPACE,FUNC=N/LINE
10 PAUSE 4E4
20 LET A$=INKEY$
30 RAND (IN 245)+(IN 245)
40 IF A$=CHR$ 118 THEN LET A$=" "
50 IF A$=CHR$ 121 THEN GOTO 80
60 PRINT A$;
70 RUN
80 PRINT
90 RUN

[Line 30: parentheses are required because the priority of IN is lower
than that of "+". RAND is just a handy way of "throwing away" the result
of IN, just as we often use RAND USR if we don't care about the value
being returned.]


STEP

This one is a "specifier" keyword that now has an additional function.
As before, it is still used as the step specifier in FOR-TO commands.
However, it is now also a COMMAND keyword to enable SINGLE-STEP mode.

It is used like GOTO. As with GOTO, STEP will cause a program to start
executing at the specified line number. However, STEP is a "single-step"
mode, also termed a "debugger" or "trace function." Here's how it works.

The specified line is brought into the edit line, and the computer waits
for you to press any key. The 1ine is only then executed, and the next
line is brought into the edit space. The process is continued, and you
can see exactly what your program is doing at all points.

Exit the single-stepper by pressing BREAK, holding it during the
execution portion of the single-stepper's action. On exit, the program
cursor will be at the last line executed. DO NOT exit the single-stepper
using the reset key! The machine will hang up REAL GOOD and your only
recourse will be power-down (or hard reset, as described earlier).

The single-stepper has a bug in V1.0 that I think I know how to fix, but
don't know where to find the room. (There's not a single unused byte in
the part of the ROM, so I've got some serious "byte-pynching" to
do.) This is that the machine gets stuck (unwanted recursion) when
trying to single-step the INPUT command. So avoid single-stepping INPUT
in this version.

The STEP command can also be placed within your program, so that you can
set up the screen as desired (or whatever) before proceeding to single-
step some particularly interesting (or buggy) part of the program.

As with GOTO, expressions can be used to specify the starting line
number.

If your program POKEs 16418 to allow printing in the edit lines, the
program will stop with error 5/ when trying to print in lines 22 or 23.
This is because the single-stepper restores the contents of 16418
(DF_SZ) to 2 before executing the line.

Similarly, if your program monkeys with the NXTLINE variable, (or some
others, like DF_CC) the single-stepper might get confused. Avoid single-
stepping long PRINT commands, etc. Otherwise a large portion of the
upper display will be lost during the "display the line" part of the
action. Trying to single-step a line longer than the full screen
(machine-code REMs, etc.) can cause hang-up. Lastly, don't use STEP if
the low byte of RAMTOP (16388) is greater than 3 and less than 14.

The STEP command used bit 4 of CD_FLAG. It is set by the STEP command,
reset by any error (e.g. BREAK, or any program-generated error).


THE BRONX CHEER

As on the PC8300, syntax errors and some of the program-generated errors
give a Bronx cheer. The exceptions are error codes 0, 5, 9 and D. As
with the PC8300 ROM, it can't be turned off. If you don't like being
insulted, don't make mistakes! Unlike the PC8300, however, the "cheer"
will sound the same in FAST as in SLOW mode.

You will also get a Bronx cheer on an aborted load (drop-out, turning
tape off prematurely, etc.). In this case, the machine will execute
NEW after the Bronx cheer. [Actually, I just discovered that this
doesn't work properly in V1.0, giving a beep instead.]


                          PATCHES TO HOT Z

The classic HOT-Z II program is the only software I'm aware of at this
time, which benefits from minor changes with the PC8300 "Timex" ROM. In
the 16K version, change the command at 5B11 from JP 0201 to JP 0206.
(This is actually a bug that is non-fatal on the Timex, but could cause
trouble on the 8300 after LOAD and SAVE).

The other changes are cosmetic, and are necessary because the positions
of the LOAD and SAVE tokens in the token file was changed slightly
because of the inclusion of the new BEEP token. Change the command at
5A31 from LD HL,01CF to LD HL,01D2. Change the command at 5A2C from LD
HL,01AB to LD HL,01AE. I suggest using the "BIG REM" merged with HOT Z
version, as it allows easy saving of the modified program.

At this writing, I haven't modified my machine to allow the use of 64K
packs, so I don't know if my high-memory HOT Z II (or other machine-
code) will run in the 8000-BFFF block. Is A15 alone used to cause video
over-ride (as on the ZX81/TS1000), or is A14 included also (as on the
TS1500, or ZX81 with "Oliger mod")?

Let me know how you like your new ROM. Any comments, critiques, bug
reports, or even rave reviews will be welcome. (Final documentation will
of course be corrected as required, and will include a few sample
programs.)

                           Fred Nachbaur